package com.vehiclemanagement.entity;   // 包名 ：这一行定义了类所在的包名，类似于文件夹路径，用于组织和管理代码。
// MyBatis Plus相关注解：用于数据库映射
import com.baomidou.mybatisplus.annotation.IdType;   // 导入MyBatis Plus的IdType枚举类
import com.baomidou.mybatisplus.annotation.TableField;   // 导入MyBatis Plus的TableField注解    
import com.baomidou.mybatisplus.annotation.TableId;   // 导入MyBatis Plus的TableId注解
import com.baomidou.mybatisplus.annotation.TableLogic;   // 导入MyBatis Plus的TableLogic注解        
import com.baomidou.mybatisplus.annotation.TableName;   // 导入MyBatis Plus的TableName注解
// Lombok注解：用于自动生成代码
import lombok.Data;   // 导入Lombok的Data注解
import lombok.ToString;   // 导入Lombok的ToString注解
// Java标准库：序列化接口和时间处理类
import java.io.Serializable;   // 导入Java的Serializable接口
import java.time.LocalDateTime;   // 导入Java的LocalDateTime类  

/**
 * 绑定关联实体类
 * 用于管理车辆、驾驶员、加油卡、ETC卡的绑定关系
 */
@Data // Lombok注解，自动为类生成所有字段的getter和setter方法、equals方法、hashCode方法和toString方法，节省手动编写这些方法的时间。
@ToString(callSuper = true) // Lombok注解，自动生成toString方法。callSuper = true表示生成的toString方法会包含父类的字段。
@TableName("binding") // MyBatis Plus注解，指定这个类对应数据库中的表名为"binding"。
public class Binding implements Serializable {   // 定义一个名为Binding的 public（公共类），并实现Serializable接口（序列化接口：表示这个类可以被转换为字节流，用于网络传输或存储）。

    private static final long serialVersionUID = 1L;   // 序列化版本号，用于在序列化和反序列化过程中验证类的版本一致性。

    /**
     * 绑定ID
     */
    @TableId(value = "id", type = IdType.AUTO) // @TableId注解表示这是主键字段，value = "id" 对应数据库表中的列名 ， type = IdType.AUTO 指定主键生成策略为自动增长
    private Long id;  //定义一个私有的Long类型变量id  （表示绑定ID）

    /**
     * 车辆ID
     */
    @TableField("vehicle_id") // 注解在类上，指定字段，value = "vehicle_id" 指定这个字段对应数据库中的"vehicle_id"列
    private Long vehicleId;  //定义一个私有的Long类型变量vehicleId  （表示车辆ID）

    /**
     * 驾驶员ID
     */
    @TableField("driver_id") // 注解在类上，指定字段，value = "driver_id" 指定这个字段对应数据库中的"driver_id"列
    private Long driverId;  //定义一个私有的Long类型变量driverId  （表示驾驶员ID）

    /**
     * 加油卡ID
     */
    @TableField("fuel_card_id") // 注解在类上，指定字段，value = "fuel_card_id" 指定这个字段对应数据库中的"fuel_card_id"列
    private Long fuelCardId;  //定义一个私有的Long类型变量fuelCardId  （表示加油卡ID）

    /**
     * ETC卡ID
     */
    @TableField("etc_card_id") // 注解在类上，指定字段，value = "etc_card_id" 指定这个字段对应数据库中的"etc_card_id"列
    private Long etcCardId;  //定义一个私有的Long类型变量etcCardId

    /**
     * 绑定时间
     */
    @TableField("bind_time") // 注解在类上，指定字段，value = "bind_time" 指定这个字段对应数据库中的"bind_time"列
    private LocalDateTime bindTime;  //定义一个私有的LocalDateTime类型变量bindTime  （使用Java 8的LocalDateTime类型表示日期和时间

    /**
     * 状态：0-解绑，1-绑定中
     */
    @TableField("status") // 注解在类上，指定字段，value = "status" 指定这个字段对应数据库中的"status"列
    private Integer status;  //定义一个私有的Integer类型变量status  （表示绑定状态，0表示解绑，1表示绑定中）

    /**
     * 备注
     */
    @TableField("remark") // 注解在类上，指定字段，value = "remark" 指定这个字段对应数据库中的"remark"列
    private String remark;  //定义一个私有的String类型变量remark  （备注信息，用于记录绑定关系的一些额外信息）

    /**
     * 创建时间
     */
    @TableField("create_time") // 注解在类上，指定字段，value = "create_time" 指定这个字段对应数据库中的"create_time"列
    private LocalDateTime createTime;  //定义一个私有的LocalDateTime类型变量createTime  （使用Java 8的LocalDateTime类型表示日期和时间）

    /**
     * 更新时间
     */
    @TableField("update_time") // 注解在类上，指定字段，value = "update_time" 指定这个字段对应数据库中的"update_time"列
    private LocalDateTime updateTime;  //定义一个私有的LocalDateTime类型变量updateTime  （使用Java 8的LocalDateTime类型表示日期和时间）

    /**
     * 删除标志：0-未删除，1-已删除
     */
    @TableField("del_flag") // 注解在类上，指定字段，value = "del_flag" 指定这个字段对应数据库中的"del_flag"列
    @TableLogic // 注解在类上，注解表示这是逻辑删除字段，MyBatis Plus会自动处理删除操作，不会真正从数据库删除数据，而是更新这个字段的值
    private Integer delFlag;  //定义一个私有的Integer类型变量delFlag  （表示删除状态，0表示未删除，1表示已删除）
    
    /**
     * 非数据库字段 - 车牌号
     */
    @TableField(exist = false) // 注解在类上，表示该字段不是数据库字段 
    //  @TableField(exist = false)   表示这个字段在数据库表中不存在，只用于程序中的数据传输，通常用于关联查询时存储其他表的信息
    private String plateNumber;  //定义一个私有的String类型变量plateNumber  （表示车牌号）
    
    /**
     * 非数据库字段 - 驾驶员姓名
     */
    @TableField(exist = false) // 注解在类上，表示该字段不是数据库字段  
    private String driverName;  //定义一个私有的String类型变量driverName  （表示驾驶员姓名）
    
    /**
     * 非数据库字段 - 加油卡号
     */
    @TableField(exist = false) // 注解在类上，表示该字段不是数据库字段  
    private String fuelCardNumber;  //定义一个私有的String类型变量fuelCardNumber  （表示加油卡号）
    
    /**
     * 非数据库字段 - ETC卡号
     */
    @TableField(exist = false) // 注解在类上，表示该字段不是数据库字段  
    private String etcCardNumber;  //定义一个私有的String类型变量etcCardNumber  （表示ETC卡号）
} 